Scripting Windows by HABERT (Antoine) - BRAVO (Cédric)
Auteur:HABERT (Antoine) - BRAVO (Cédric) [BRAVO, HABERT -]
La langue: fra
Format: epub
Tags: Informatique
Éditeur: O'Reilly
Publié: 2005-08-09T09:15:14+00:00
Scripting Windows
148
DEUXIÈME PARTIE
Autre méthode de surveillance : surveiller les services
On peut dans certains cas utiliser une approche différente de la boucle récursive pour
faire de l’audit. Prenons l’exemple suivant pour illustrer cette nouvelle approche, qui
peut être plus simple à mettre en œuvre suivant vos affinités.
Problématique
On vous demande de créer un script permettant d’auditer le changement d’état des
services sur une machine afin de voir si ce sont ces changements qui poseraient des
problèmes à une application en cours de test. Le test doit s’effectuer toutes les cinq
secondes et doit vous remonter tout changement d’état intervenant.
Méthode de résolution
Nous allons nous pencher sur WMI pour régler ce problème. Tout d’abord, nous
créons la requête permettant d’auditer la classe Win32_Service.
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" _
& "strComputer & "\root\cimv2")
Set colServices = objWMIService.ExecNotificationQuery(_
"SELECT * FROM __instancemodificationevent " &_
"WITHIN 10" &_
"WHERE TargetInstance " &_
"ISA 'Win32_Service'")
Set objService = colServices.NextEvent
Avant de tester le changement d’état, nous allons créer une boucle infinie plutôt
qu’une boucle récursive comme dans l’exemple précédent :
' on définit un compteur égal à 0
i = 0
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" _
& "strComputer & "\root\cimv2")
Set colServices = objWMIService.ExecNotificationQuery(_
"SELECT * FROM __instancemodificationevent " &_
"WITHIN 10" &_
"WHERE TargetInstance " &_
"ISA 'Win32_Service'")
© Groupe Eyrolles, 2005
Techniques courantes d’administration système
149
CHAPITRE 8
' Création d'une boucle se répétant à l'infini
Do While i=0
Set objService = colServices.NextEvent
' ici se situera notre code'
Loop
Comme le compteur i sera toujours égal à 0, notre code se répétera à l’infini. On
pourrait directement faire une boucle de type :
Do
' code
Loop
Mais l’introduction d’un compteur permet dans ce cas de pouvoir aussi stopper le
script si le besoin s’en fait sentir. Attention : pour stopper ce type de script sans fin, il
faut passer par le gestionnaire de tâches et terminer le processus wscript.exe lié au
script.
Complétons maintenant notre requête de modification d’état.
Cette requête teste toutes les dix secondes un changement dans la classe service.
Nous souhaitons vérifier le changement de statut d’un service, nous avons deux pro-
priétés à notre disposition :
• TargetInstance.state qui renvoie l’état actuel du service (démarré, stoppé,
arrêté) lors de la requête en cours.
• PreviousInstance.State qui donne l’état précédent, c’est-à-dire celui obtenu
lors de la requête précédente.
Nous allons donc faire un test sur ces deux propriétés pour voir si elles sont diffé-
rentes, et faire un echo du nom du service ayant changé d’état.
Chap8vbs6.vbs : test du changement d’état d’un des services sur une station locale
' on définit un compteur égal à 0
i = 0
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" _
& "strComputer & "\root\cimv2")
Set colServices = objWMIService.ExecNotificationQuery(_
"SELECT * FROM __instancemodificationevent " &_
"WITHIN 10" &_
WHERE TargetInstance " &_
ISA 'Win32_Service'")
© Groupe Eyrolles, 2005
Scripting Windows
150
DEUXIÈME PARTIE
Chap8vbs6.vbs : test du changement d’état d’un des services sur une station locale
' Création d'une boucle se répétant à l'infini
Do While i=0
Set objService = colServices.NextEvent
' Test de l'état du service par rapport à la requête précédente
If objService.TargetInstance.State <> _
objService.PreviousInstance.State Then
wscript.echo "le service" & objService.TargetInstance.Name &_
" a changé d'état"
End If
Loop
Il est possible de sortir du script à la détection du premier changement, en changeant
la valeur du compteur i. Cet exemple montre comment quitter le script une fois le
premier changement découvert :
' on définit un compteur égal à 0
i = 0
strComputer = ".
Télécharger
Ce site ne stocke aucun fichier sur son serveur. Nous ne faisons qu'indexer et lier au contenu fourni par d'autres sites. Veuillez contacter les fournisseurs de contenu pour supprimer le contenu des droits d'auteur, le cas échéant, et nous envoyer un courrier électronique. Nous supprimerons immédiatement les liens ou contenus pertinents.
CISSP Guide d'examen tout-en-un -Nouvelle édition- Version Française: Questions pratiques n ° 1 du CISSP - TOUS les domaines du CISSP (French Edition) by education G(893)
Histoires de Robots by Collectif(855)
Histoires de Robots by collectif(843)
Virtualisation du poste de travail Windows 7 et 8 by Eyrolles(824)
Les médias by Francis Balle(806)
Sommeil by Inconnu(e)(776)
La Sécurité Informatique Connexion VPN Site -à- Site: Réseau Privé Virtuel ,IPSEC,Livre sur VPN (French Edition) by ERIC AB(731)
Les réseaux: L'ère des réseaux cloud et de la 5G - Edition 2018-2020 (French Edition) by Guy Pujolle(691)
Scripting Windows by HABERT (Antoine) - BRAVO (Cédric)(576)